package days3.array;

import java.util.Arrays;

/**
 * 数组不难，但是定义要记一下，重在理解，后面用到的比较多。
 * <p>
 * 定义中的重点是：
 * <p>
 * 1. 数组能够存储多个元素，多个数据。一批学生、一批分数。
 * 2. 这些数据元素的数据类型，必须一致。
 * 3. 这些数据是有序的：
 * 1. 数组中的每个存储单元，都有唯一编号(下标)，该编号，从左向右，从0开始编号，最大下标值是数组长度-1
 * （定义一个长度为10的数组，从0开始编号， 最大的下标是 9 ）
 * <p>
 * 2. 这种编号，专业的术语称之为下标或者索引（index）
 * <p>
 * <p>
 * <p>
 * 1. 定义一个数组，也是定义一个变量。而且是一种引用数据类型变量，数组是典型的引用数据类型！
 * （数组是一个变量。 之前采用的方式，是定义80个变量；现在有了数组之后，只用定义一个数组，一个数组中能存储80个数据。 ）
 * 2. 数组里面，可以存储基本数据类型元素，也可以存储引用数据类型元素，但是一个数组里面只能存储同一种数据类型元素。
 * （里面存储的数据类型都是一致的。要么全部是int， 要么全部是 double ）
 * <p>
 * <p>
 * <p>
 * ************************************************
 * 数组在面试的时候可能会被问到。
 * * 数组怎么插入数据； 怎么删除数据； 怎么查找数据。
 * * 链表。
 * ***********************************************
 *
 * @Author fengzihao
 * @Date 2024-04-17 14:43
 */
public class Practice {
    public static void main(String[] args) {
        //       数组的声明。
        // 格式1： 数据类型[] 数组名;
        // 格式2： 数据类型 数组名[];

        // 虽然是两种定义方法
        // 但是最好用第一种定义方法:格式一
        int[] numbers;
        int numbers1[];


        // 数组初始化之后必须先声明才能使用
        // 初始化有两种方式
        // 一种是静态初始化,一种是动态初始化
        // 静态初始化是一开始就显式的给出数据
        // 动态初始化一开始只是给出数组的长度

        // 这两种方法都行,但是不能能两种方法混着用
        // 1.静态初始化
        int[] numbers2 = new int[]{1, 2, 3, 4};
        // 2.动态初始化
        int[] numbers3 = new int[10];

        // 如下面这种混淆着用是不行的.会报错
        // int[] numbers4 = new int[5]{1,2,3,4};
        // 经典的错误: 会将静态初始化和动态初始化结合使用。

        // 静态初始化：初始化数组的时候，直接告诉数组中每个元素的取值。
        int[] numbers7 = new int[]{1, 2, 3};
        int[] numbers8 = {1, 2, 3};
        // 动态初始化：初始化数组的时候，只告诉数组的长度。 数组中每个元素的取值由系统（JVM）决定
        int[] numbers9 = new int[9];

        // 不允许 动静结合。
        // int[] numbers4 = new int[2]{1,2,3};


        // 显示写法可以省略写一些内容,简化写法
        int[] numbers5 = {1, 2, 3, 4};

        // 简化写法，不能单独使用。要么声明的时候就直接使用简化写法； 如果先声明，再使用简化写法赋值。不允许这样写。
        // int[] numbers3;
        // numbers3 = {888, 777, 666};

        // 动态初始化
        // 程序员只是指定数组的长度，数组中每个元素的初始值由系统（实际上是JVM）决定。
        // 动态初始化，就是你告诉系统，创建一个长度为10的数组。 数组中的每个元素， 由系统直接决定。
        // 数据类型[] 数组名 = new 数据类型[数组长度];

        // 创建了一个长度为10的数组。 但是数组中的初始化值，我们没有指定。由系统帮我们指定的。
        int[] numbers6 = new int[10];

        // 数组的长度必须是一个int范围内的非负数。
        // int[] numbers2 = new int[-10];

        // 直接打印数组名字,打印出来的是数组的地址
        System.out.println(numbers7);
        // 可以通过Arrays.toString()方法来打印数组
        System.out.println(Arrays.toString(numbers7));



    }


}
